package com.briup.smartcity_group1.service;

import com.briup.smartcity_group1.bean.basic.Article;
import com.briup.smartcity_group1.exception.ServiceException;

import com.briup.smartcity_group1.consts.ArticleStatusConsts;
import com.github.pagehelper.PageInfo;

import java.util.Collection;

/**
 * 咨询信息相关模块接口
 * @author congee(congee02 @ 163.com)
 * @date 1/5/2023 12:14 AM
 */
public interface IArticleService {

    /**
     * 修改资讯状态
     * @param id        咨询信息 id
     * @param status    设置的资讯信息状态 {@link ArticleStatusConsts}
     * @throws ServiceException 咨询信息不存在
     */
    void changeArticleStatus(int id, Integer status) throws IllegalAccessException;

    /**根据 id 删除咨询信息
     * @param id 咨询信息id
     * @throws ServiceException 咨询信息不存在
     */
    void deleteArticleById(int id);

    /** 通过id查询资讯信息
     * @param id 咨询信息id
     * @throws ServiceException 咨询信息不存在
     * @return  查询到的资讯信息
     */
    Article findArticleById(int id);

    /**分页查询所有推荐的咨询信息
     * @param pageNum  页码
     * @param pageSize  单页记录数量
     * @return 推荐的咨询信息的分页信息
     */
    PageInfo<Article> findAllRecommendedArticlesByPage(int pageNum, int pageSize);

    /** 分页查询所有资讯信息
     * @param tittle     标题，支持模糊查询
     * @param categoryId    栏目id
     * @param status    文章状态
     * @param pageNum  页码
     * @param pageSize  单页记录数量
     * @return 咨询信息的分页信息
     */
    PageInfo<Article> findAllArticlesByPage
    (String tittle, Integer categoryId, Integer status, int pageNum, int pageSize);

    /**保存或更新消息信息
     * 如果参数中包含id后端认为是更新操作，如果参数中不包含id认为是插入操作
     * @param article 要保存或者更新的咨询消息
     * @throws ServiceException 更新时咨询信息不存在
     */
    void saveOrUpdateArticle(Article article);

}
